<?php
require_once('common.php');
require_once('teacher.php');
class Student {

	/**
	 * Az időpontok tulajdonságai:
	 * nincs jel = nincs ütemezve          -- "nincs_jel"
	 * X = nem ütemezhető, 				   -- "nem_utemezheto_nem_szeretne" vagy "nem_utemezheto_nincs_jel"
	 * nem véglegesen ütemezve,            -- "nem_veglegesen_utemezve"
	 * véglegesen ütemezve,				   -- "veglegesen_utemezve"
	 * a hallgató nem szeretne akkor jönni -- "nem_szeretne"
	 */
	public static function idopont_statuszok($hallgato_id, $kurzus_id, $vizsga_id) {
		$idopont_statusz = array();
		$vizsga_idopontok = Student::vizsga_idopontok($vizsga_id);
		// Ha nem ütemezhető, akkor az összes időpontra nem nem ütemezhető.
		$utemezheto = utemezheto($kurzus_id, $hallgato_id); // teacher.php-beli
		foreach($vizsga_idopontok as $ora=>$idopontok) {
			foreach($idopontok as $idopont) {
				$idopont_statusz[$idopont["ido"]] =
					Student::idopont_statusz($hallgato_id, $kurzus_id, $vizsga_id, $idopont["ido"], $utemezheto);
			}
		}
		return $idopont_statusz;
	}

	/**
	 * Megfelel a hallgatónak ez az időpont vizsgázásra? Ütemezve is van rá?
	 * @return:
	 */
	private static function idopont_statusz($hallgato_id, $kurzus_id, $vizsga_id, $idopont_id, $utemezheto){
		if(self::szeretne_vizsgazni($hallgato_id, $kurzus_id, $vizsga_id, $idopont_id)){
			if($utemezheto) {
				return "nem_szeretne";
			}
			else {
				return "nem_utemezheto_nem_szeretne";
			}
		} else if(self::utemezve_van($hallgato_id, $kurzus_id, $vizsga_id, $idopont_id) !== FALSE)	{
			return self::utemezve_van($hallgato_id, $kurzus_id, $vizsga_id, $idopont_id);
		} else {
			if($utemezheto) {
				return "nincs_jel";
			}
			else {
				return "nem_utemezheto_nincs_jel";
			}
		}
	}

	/**
	 * Ütemezve van a hallgató erre az időpontra vizsgázni?
	 * @return FALSE ha nincs ütemezve, különben "veglegesen_utemezve" vagy "nem_veglegesen_utemezve"
	 */
	private static function utemezve_van($hallgato_id, $kurzus_id, $vizsga_id, $idopont) {
		$db = new DB();
		$stmt = $db->query("
				SELECT vegleges FROM utemezett
				WHERE hallgato_id = {$hallgato_id}
				AND kurzus_id = {$kurzus_id}
				AND vizsga_id = {$vizsga_id}
				AND idopont = '{$idopont}'
			");
		$result = $stmt->fetch_array();
		if(is_null($result)) {
			return FALSE;
		} else {
			if($result['vegleges']) {
				return "veglegesen_utemezve";
			} else {
				return "nem_veglegesen_utemezve";
			}
		}
	}

	/**
	 *
	 * @return boolean Megfelel a hallgatónak ez az időpont vizsgázásra?
	 */
	private static function szeretne_vizsgazni($hallgato_id, $kurzus_id, $vizsga_id, $idopont) {
		$db = new DB();
		$stmt = $db->query("
				SELECT COUNT(*) AS nemszeretne FROM hallgato_nemszeretne
				WHERE hallgato_id = {$hallgato_id}
				AND kurzus_id = {$kurzus_id}
				AND vizsga_id = {$vizsga_id}
				AND idopont = '{$idopont}'
		");
		$result = $stmt->fetch_array();
		return $result["nemszeretne"] != 0;
	}

	/**
	 * Melyek egy vizsgához tartozó lehetséges vizsgaidőpontok?
	 */
	public static function vizsga_idopontok($vizsga_id) {
		$db = new DB();
		$stmt = $db->query("SELECT * FROM vizsga_idopont WHERE vizsga_id = {$vizsga_id} ORDER BY idopont");
		$vizsga_idopontok = array();
		while($idopont = $stmt->fetch_array()){
			$id = $idopont["id"];
			$ido = $idopont["idopont"];
			$vizsga_idopontok[substr($ido, 0, 2)][] = array(
					'id' => $id,
					'ido' => $ido,
					'perc' => substr($ido, 3, 2)
			);
		}
		return $vizsga_idopontok;
	}

	public static function exam_save($param) {
		$db = new DB();
		// A bejelentkezett felhasználó.
		$stmt = $db->query("SELECT * FROM hallgato WHERE felhasznalo_id = " . $_SESSION['felhasznalo']['id']);
		$hallgato = $stmt->fetch_array();
		// Töröljük az erre a vizsgára való jelentkezéseit, amire jelentkezett,
		// később feljegyezzük.
		$stmt = $db->prepare("
			DELETE FROM hallgato_vizsga WHERE hallgato_id = ? AND vizsga_id = ?;
		");
		$stmt->bind_param('ii', $hallgato['id'], $_REQUEST['vizsga_id']);
		$stmt->execute();

		// Töröljük az erre a vizsgára vonatkozó nem kedvelt időpontjait,
		// később feljegyezzük.
		$stmt = $db->prepare("
				DELETE FROM hallgato_nemszeretne WHERE hallgato_id = ? AND vizsga_id = ?;
				");
		$stmt->bind_param('ii', $hallgato['id'], $_REQUEST['vizsga_id']);
		$stmt->execute();

		foreach($_REQUEST as $key => $value) {
			$key = explode('|',$key);
			// A vizsgára jelentkezést jelentkezett|kurzus_id formában továbbítjuk
			// a vizsga_id-t a $_REQUEST['vizsga_id']-ből tudjuk.
			if($key[0] === 'jelentkezett') {
				if($value) { // Jelentkezett.
					$stmt = $db->prepare("
							INSERT INTO hallgato_vizsga(kurzus_id, hallgato_id, vizsga_id) VALUES(?, ?, ?);
							");
					$stmt->bind_param('iii', $key[1], $hallgato['id'], $_REQUEST['vizsga_id']);
					$stmt->execute();
				}
			}

			// > A másik hogy én a hallgato nem szeretne táblában tárolom , hogy mikor nem
			// > szeretne ,a te részedben pedig azt kellene bejelölni , hogy a hallgató mikor
			// > szeretne, esetleg megoldható , hogy a nem kiválasztott értékeket tedd bele a
			// > mikor_nemszeretne táblába ?
			// idopont|$kurzus_id|$ido
			if($key[0] === 'idopont') {
				// Ha nincs becheckolva egy időpont, akkor 0 értéket küldünk egy hidden
				// input-tal. Az ilyen idopontokat vesszük föl a hallgato_nemszeretne táblába.
				if(!$value) {
					$stmt = $db->prepare("
						INSERT INTO hallgato_nemszeretne(hallgato_id, kurzus_id, vizsga_id, idopont) VALUES(?, ?, ?, ?);
					");
					$stmt->bind_param('iiis', $hallgato['id'], $key[1], $_REQUEST['vizsga_id'], $key[2]);
					$stmt->execute();
				}
			}
		}
		
		// Ha a hallgató nem jelentkezett egy vizsgára, akkor töröljük a vizsgára vonatkozó ütemezését.
		$stmt = $db->query("
				SELECT * FROM kurzus
				WHERE
				id IN (SELECT kurzus_id FROM vizsga_kurzus WHERE vizsga_id = " . $_REQUEST['vizsga_id'] . ")
				AND id IN (SELECT kurzus_id FROM hallgato_kurzus WHERE hallgato_id = " . $hallgato["id"] . ")
		");
		// Azok a kurzusok, melyekre jár a bejelentkezett felhasználó, és tartozik
		// hozzájuk $vizsga["id"] vizsga.
		while($kurzus = $stmt->fetch_array()) {
			if(!self::jelentkezett($hallgato["id"], $kurzus["id"], $_REQUEST['vizsga_id'])) { 			
				$stmt_utemezett = $db->prepare("
					DELETE FROM utemezett 
					WHERE vizsga_id = ? AND hallgato_id = ? AND kurzus_id = ?;");
				$stmt_utemezett->bind_param('iii', $_REQUEST['vizsga_id'], $hallgato['id'], $kurzus["id"]);
				$stmt_utemezett->execute();			
			}
		}		
	}
	
	/**
	 * Jelentkezett már a vizsgára?
	 * @param int $hallgato_id
	 * @param int $kurzus_id
	 * @param int $vizsga_id
	 */
	public static function jelentkezett($hallgato_id, $kurzus_id, $vizsga_id) 
	{
		$db = new DB();
		$jelentkezett_stmt = $db->query("
				SELECT COUNT(*) AS jelentkezett FROM hallgato_vizsga
				WHERE hallgato_id = ".$hallgato_id."
				AND kurzus_id = ".$kurzus_id."
				AND vizsga_id = ".$vizsga_id
		);
		$jelentkezett = $jelentkezett_stmt->fetch_array();
		return $jelentkezett["jelentkezett"];
	}
}
